package binpacking.algorithms;
import java.util.List;
import binpacking.model.*;


public class LastFit {
	private List<Block> blocks;
	private BinContainer binContainer;
	private int binSize;

	public LastFit( List<Block> l, BinContainer binContainer, int binSize ) {
		this.blocks = l;
		this.binContainer = binContainer;
		this.binSize = binSize;
	}

	public void doLastFit() {


		while(blocks.size() > 0) {

			//pakt altijd eerste block en verwijdert uit lijst
			Block block = blocks.remove(0);

			//bereken indexnummer van de laatste container
			int binIndex = binContainer.getBins().size()-1;

			//loop van achter naar voren containers bij langs,
			//net zo lang tot het block in een container past.
			while(binIndex >= 0){

				Bin bin = binContainer.getBins().get(binIndex);

				if(bin.storageAvailable( block.getSize() ) ){
					bin.addBlock( block );
					block.setPlaced( true );
					break;
				} else {
					binIndex--;
				}

			}

			//Als block niet geplaatst is
			if(!block.isPlaced() ) {
				Bin bin = new Bin(binSize);
				bin.addBlock( block );
				block.setPlaced( true );
				binContainer.getBins().add(bin);
			}
		}
	}


	public String getResult() {
		return "Bins used: " + binContainer.getBins().size() + "\n" + binContainer.getVisualRepresentation();
	}
}

